.TH std::mutex::unlock 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::mutex::unlock \- std::mutex::unlock

.SH Synopsis
   void unlock();  \fI(since C++11)\fP

   Unlocks the mutex.

   The mutex must be locked by the current thread of execution, otherwise, the behavior
   is undefined.

   This operation synchronizes-with (as defined in std::memory_order) any subsequent
   lock operation that obtains ownership of the same mutex.

.SH Parameters

   \fI(none)\fP

.SH Return value

   \fI(none)\fP

.SH Exceptions

   Throws nothing.

.SH Notes

   unlock() is usually not called directly: std::unique_lock and std::lock_guard are
   used to manage exclusive locking.

.SH Example

   This example shows how lock and unlock can be used to protect shared data.


// Run this code

 #include <chrono>
 #include <iostream>
 #include <mutex>
 #include <thread>

 int g_num = 0; // protected by g_num_mutex
 std::mutex g_num_mutex;

 void slow_increment(int id)
 {
     for (int i = 0; i < 3; ++i)
     {
         g_num_mutex.lock();
         int g_num_running = ++g_num;
         g_num_mutex.unlock();
         std::cout << id << " => " << g_num_running << '\\n';

         std::this_thread::sleep_for(std::chrono::seconds(1));
     }
 }

 int main()
 {
     std::thread t1(slow_increment, 0);
     std::thread t2(slow_increment, 1);
     t1.join();
     t2.join();
 }

.SH Possible output:

 0 => 1
 1 => 2
 0 => 3
 1 => 4
 0 => 5
 1 => 6

.SH See also

   lock     locks the mutex, blocks if the mutex is not available
            \fI(public member function)\fP
   try_lock tries to lock the mutex, returns if the mutex is not available
            \fI(public member function)\fP
   C documentation for
   mtx_unlock
